package com.wzcl.app.service;

import com.wzcl.app.dao.model.*;
import com.wzcl.app.model.common.MyPage;
import com.wzcl.app.model.common.RVO;
import com.wzcl.app.model.dto.CourseDto;
import com.wzcl.app.model.vo.CourseVo;
import com.wzcl.app.model.vo.StudyDataVo;

import java.util.List;

public interface CourseService extends BaseService<Course, CourseDto> {

    Course addCourse(CourseDto courseDto);

    Course delCourseById(Integer id);

    void addCourseCommodity(Commodity commodity);

    void delCourseCommodityById(Integer id);

    Course updateCourse(CourseDto courseDto);

    Course getCourseById(Integer id);

    Course getAndCheckByCommodityId(Integer id);

    List<Course> getCourseById(List<Integer> ids);

    List<Course> getCourseList(CourseDto courseDto);

    MyPage<Course> getCoursePage(CourseDto courseDto);

    Course saveCourse(Course course);

    void viewCourse(Integer id);

    /**
     * 模糊查询：直播课、同步课、专题课中的课程并分页
     * @param courseDto 包含分页数据的课程对象
     * @return 返回查询后的数据
     */
    List<Course> retrieveCourseByType(CourseDto courseDto);

    /**
     * 查询当前老师（用户）下指定类型的课程
     * @return 返回课程列表
     */
    RVO retrieveByUserId();

    /**
     * 查询当前课程下已完成的章节
     * @param courseId 课程id
     * @return 返回查询结果
     */
    List<EssayCourseCatalog> retrieveByCourseId(Integer courseId);


    /**
     * 统计当前作文课下的学习数据
     * @param courseId 课程id
     * @return 返回学习数据
     */
    StudyDataVo retrieveStudyDataByCourseId(Integer courseId);

    /**
     * 获取课程下所有任务
     * @param courseId 课程id
     * @return 返回任务列表
     */
    List<CatalogTask> getAllTaskByCourse(Integer courseId);

    /**
     * 获取课程下所有完成的章节
     * @param courseId 课程id
     * @return 返回章节列表
     */
    List<EssayCourseCatalog> getAllCatalogByCourse(Integer courseId);
}